﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Loja.custumer
{
    public partial class editcustumer : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            if (!IsPostBack)
            {
                ddlSexo.DataSource = new[] {new { SexCod = "", SexNome = ""},
                                                new { SexCod = "M", SexNome = "Masculino" }, 
                                                new { SexCod = "F", SexNome = "Femenino" }
                                               };
                ddlSexo.DataBind();

                using (LojaChocolateDCDataContext dc = new LojaChocolateDCDataContext())
                {                    
                    dpdEstado.DataSource = dc.Estados;
                    dpdEstado.DataBind();
                    dpdCidade.DataSource = dc.Cidades;
                    dpdCidade.DataBind();
                }

                if (Session["Cliente"] != null)
                {
                    Cliente cliente = (Cliente)(Session["Cliente"]);
                    hdCliCod.Value = cliente.CliID.ToString();
                    this.preenche_campos(cliente);
                }
            }

            String script = @"$(document).ready(function () 
                                {  
                                    //combobox();
                                    $('.botao').button();
                                    $('.cancel').button({icons: {primary: 'ui-icon-cancel'}}).css('margin', '25px 0 20px 150px');
                                    $('.gravar').button({icons: {primary: 'ui-icon-disk'}}).css('margin', '25px 0 20px 0px');
                                    $('#tabs').tabs();
                                    $('.upper').css('text-transform', 'uppercase');

                                    
                                    $( '#dialogErro' ).dialog({
			                                autoOpen: false,
			                                modal: true,
			                                buttons: {
				                                OK: function() {
                                                    document.getElementById('ContentPlaceHolder1_lblErro').innerText = """";                                                    
                                                    //debugger;
					                                $( this ).dialog( 'close' );
                                                    
				                                },
			                                },
			                        });
                                    
                                    if(document.getElementById('ContentPlaceHolder1_lblErro').innerText != """")
                                        var abre = $('#dialogErro').dialog('open');
                                });";

            ScriptManager.RegisterClientScriptBlock(Page, Page.GetType(), "javas", script, true);

        }

        protected void btnSair_Click(object sender, EventArgs e)
        {
            Response.Redirect(Page.ResolveUrl("../store/") + "home.aspx");
        }

        protected void btnGravar_Click(object sender, EventArgs e)
        {
            Cliente _cliente = null;

            if (Session["Cliente"] == null)
            {
                using (LojaChocolateDCDataContext dc = new LojaChocolateDCDataContext())
                {
                    System.Data.Linq.Table<Cliente> tblCliente = dc.GetTable<Cliente>();
                    try
                    {
                        _cliente = new Cliente();
                        this.salva_dados(_cliente);
                        tblCliente.InsertOnSubmit(_cliente);
                        tblCliente.Context.SubmitChanges();
                        Session["Cliente"] = _cliente;
                    }
                    catch (Exception erro)
                    {
                        lblErro.Text = erro.Message;
                    }
                }
            }
            else
            {
                using (LojaChocolateDCDataContext dc = new LojaChocolateDCDataContext())
                {
                    System.Data.Linq.Table<Cliente> tblCliente = dc.GetTable<Cliente>();
                    _cliente = tblCliente.Where(c => c == ((Cliente)Session["Cliente"])).SingleOrDefault();
                    try
                    {
                        this.salva_dados(_cliente);
                        tblCliente.Context.SubmitChanges();
                        Session["Cliente"] = _cliente;
                    }
                    catch (Exception erro)
                    {
                        lblErro.Text = erro.Message;
                    }
                }
            }

            if (!String.IsNullOrEmpty(Request.Params["redirect"]) && Request.Params["redirect"] == "dashboard")
            {
                Response.Redirect(Page.ResolveUrl("~/customer/ListaPedidos.aspx"),true);
            }
            else 
            {
                if (!String.IsNullOrEmpty(Request.Params["redirect"]))
                {
                    Server.Transfer(Request.Params["redirect"], true);
                }
                else
                {
                    Response.Redirect("~/customer/ListaPedidos.aspx");
                }
            }
        }

        public void ValidaCPF(object source, ServerValidateEventArgs args)
        {
            args.IsValid = this.valida_cpf(txtCPF.Text);
        }

        public bool valida_cpf(string cpf)
        {

            int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
            string tempCpf;
            string digito;
            int soma;
            int resto;
            cpf = cpf.Trim();
            cpf = cpf.Replace(".", "").Replace("-", "");
            if (cpf.Length != 11)
            {
                return false;
            }

            tempCpf = cpf.Substring(0, 9);
            soma = 0;
            for (int i = 0; i < 9; i++)
            {
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
            }
            resto = soma % 11;

            if (resto < 2)
            {

                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }
            digito = resto.ToString();
            tempCpf = tempCpf + digito;
            soma = 0;
            for (int i = 0; i < 10; i++)
            {
                soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
            }
            resto = soma % 11;

            if (resto < 2)
            {
                resto = 0;
            }
            else
            {
                resto = 11 - resto;
            }
            digito = digito + resto.ToString();

            return cpf.EndsWith(digito);

        }

        protected Cliente salva_dados(Cliente cliente)
        {
            try
            {
                cliente.CliNom = txtNome.Text;
                cliente.CliCpf = Convert.ToDecimal(txtCPF.Text.Replace(".", "").Replace("-", ""));
                cliente.CliRG = txtRG.Text;
                cliente.CliMail = txtEmail.Text;
                cliente.CliTel = txtTelefone1.Text;
                cliente.CliCel = txtTelefone2.Text;
                Donini.Crypt.Crypt c = new Donini.Crypt.Crypt(Donini.Crypt.CryptProvider.Rijndael);
                c.Key = "chocolate";
                if(!String.IsNullOrEmpty(txtSenha.Text))
                    cliente.CliSenha = c.Encrypt(txtSenha.Text);

                int numero;
                if ((!String.IsNullOrEmpty(txtCEP.Text)))
                {
                    if(Int32.TryParse(txtCEP.Text.Remove(5, 1), out numero))
                    {
                    cliente.CliCEP = numero;
                    }
                    else
                    {throw new Exception("CEP inválido!");}
                }
                cliente.CliEnd = txtEndereco.Text;

                if (!String.IsNullOrEmpty(txtNumero.Text) && Int32.TryParse(txtNumero.Text, out numero))
                {
                    cliente.CliEndNum = (short)numero;
                }
                cliente.CliEndCom = txtComplemento.Text;
                cliente.CliDatNasc = new DateTime(Convert.ToInt32(txtAno.Text),
                                                   Convert.ToInt32(txtMes.Text),
                                                   Convert.ToInt32(txtDia.Text));
                cliente.CliCid = short.Parse(dpdCidade.SelectedItem.Value);
                cliente.CliEst = dpdEstado.SelectedItem.Value;
                cliente.CliBai = txtBairro.Text;
            }
            catch (Exception erro)
            {
                lblErro.Text = erro.Message;
            }
            return cliente;
        }

        protected Cliente preenche_campos(Cliente cliente)
        {
            try
            {
                txtNome.Text = cliente.CliNom.Trim();
                txtCPF.Text = Convert.ToString(cliente.CliCpf);
                txtRG.Text = cliente.CliRG.Trim();
                txtEmail.Text = cliente.CliMail.Trim();
                txtTelefone1.Text = cliente.CliTel.Trim();
                txtTelefone2.Text = cliente.CliCel.Trim();
                Donini.Crypt.Crypt c = new Donini.Crypt.Crypt(Donini.Crypt.CryptProvider.Rijndael);
                c.Key = "chocolate";
                txtSenha.Text = c.Decrypt(cliente.CliSenha).Trim();
                txtCEP.Text = Convert.ToString(cliente.CliCEP);
                txtEndereco.Text = cliente.CliEnd;
                txtNumero.Text = Convert.ToString(cliente.CliEndNum);
                txtComplemento.Text = cliente.CliEndCom;
                txtDia.Text = Convert.ToString(cliente.CliDatNasc.Value.Day).PadLeft(2, '0');
                txtMes.Text = Convert.ToString(cliente.CliDatNasc.Value.Month).PadLeft(2, '0');
                txtAno.Text = Convert.ToString(cliente.CliDatNasc.Value.Year);
                dpdCidade.SelectedItem.Value = Convert.ToString(cliente.CliCid);
                dpdEstado.SelectedItem.Value = cliente.CliEst;

            }
            catch (Exception erro)
            {
                lblErro.Text = erro.Message;
            }
            return cliente;
        }
    }
}